#[cfg(test)]
pub mod test_string {

    /* 字符串是什么: byte集合 
    - Rust的核心语言层面，只有一个字符串类型：字符串切片str（或＆str)
    - 字符串切片：对存储在其它地方、UTF-8编码的字符串的引用
        - 字符串字面值：存储在二进制文件中，也是字符串切片
    - String类型：
        - 来自 标准库 而不是 核心语言
        - 可增长、可修改、可拥有
        - UTF-8 编码
    通常说的字符串是指？ 
    - String和＆str
        - 标准库里用的多
        - utf-8编码
     */
    #[test]
    fn str01() {
        let data = "hello world";
        let s = data.to_string();
        let s1 = "hello".to_string();
        let s2 = String::from("world");

        let s3 = s1 + "_" + &s2 + "_" + &s;

        let s4 = format!("{}-{}-{}", s, s2, String::from("value"));

        println!("s  = {}", s);
        // println!("s1 = {}", s1);
        println!("s2 = {}", s2);
        println!("s3 = {}", s3);
        println!("s4 = {}", s4);
    }

    #[test]
    fn str02() {

        /* 更新 String 
        - push_str(）方法：把一个字符串切片附加到String
        - push(）方法：把单个字符附加到String
        - +：连接字符串
            - 使用了类似这个签名的方法fn add(self, s: &str)-> String(..)
            ．标准库中的add 方法使用了泛型
            ．只能把 &str 添加到String
            ．解引用强制转换（deref coercion)
        - format!：连接多个字符串
            - 和println!(）类似，但返回字符串
            - 不会获得参数的所有权
         */


        /* 内部表示 
        - String 是对Vec<u8> 的包装
            - len(）方法
         */

        /* 字节、标量值、字形簇 Bytes, Scalar Values, Grapheme Clusters
        - Rust 有三种看待字符串的方式：
            - 字节
            - 标量值
            - 字形簇（最接近所谓的"字母")
        - Rust不允许对String 进行索引的最后一个原因：
            - 索引操作应消耗一个常量时间 O(1)
            - 而String无法保证：需要遍历所有内容，来确定有多少个合法的字符。
         */

        /* 切割 String 
        - 可以使用［］和 一个范围 来创建字符串的切片（例子）
            - 必须谨慎使用
            - 如果切割时跨越了字符边界，程序就会panic。
            - (b1,b2),(b3,b3),(b4,b5),(b7,b7) 会切割出 (b1, b2), (b3, 
         */

        /* 遍历String的方法 
        - 对于标量值：chars() 方法
        - 对于字节：bytes(）方法：
        - 对于字形簇：很复杂，标准库未提供。
         */

        /* String不简单
        - Rust选择将正确处理String 数据作为所有Rust程序的默认行为
            - 程序员必须在处理UTF-8数据之前投入更多的精力
        - 可防止在开发后期处理涉及非ASCII字符的错误。
         */
    }


}